home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
031-040
/
amok32
/
billard
/
billard.dok
< prev
next >
Wrap
Text File
|
1993-11-04
|
15KB
|
251 lines
*********************************************************************
Dieses Billardspiel ist Shareware !!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Es darf erst gespielt werden nach Zahlung von DM 5 oder $ 3 an:
Stefan Salewski
Stolper Weg 3
D-2160 Stade
Bankverbindung: Stadt-Sparkasse Stade
Bankleitzahl 24151005
Kontonummer: 823864
*********************************************************************
Da das Erstellen von guter Software nicht nur mit einem großen
Zeitaufwand, sondern auch mit einigen Unkosten verbunden ist, und ich
als Student keine Einnahmen habe, habe ich mich entschloßen, dieses
Spiel im Gegensatz zu meinen bisherigen Werken nicht als
Public-Domain, sondern als Shareware zu veröffentlichen. (Am Ende der
Anleitung zu meinem Mathematikprogramm R.o.M.(AMOK#11) hatte ich
bereits darum gebeten, daß mir diejenigen, die das Programm viel
benutzen, eine kleine Spende zukommen lassen sollten. Das ist jetzt
weit über ein Jahr her und bislang habe ich von Niemanden etwas
erhalten.) Dieses Spiel ist also Shareware. Das bedeutet, daß alle
Rechte an diesem Programm weiterhin bei mir liegen und daß es nur von
Personen benutzt werden darf, die mir den Betrag von DM 5 ($3)
geschickt bzw. auf mein Konto überwiesen haben. Befreit von dieser
Sharewaregebühr sind alle Programmierer, die mindestens ein gutes
Programm (was gut ist, muß jeder Programmierer selbst entscheiden)
als PD oder Shareware veröffentlicht haben, und Herausgeber von
PD-Serien und Diskmagazinen.
Jetzt zum eigentlichen Spiel: Die vorliegende Version läuft nur auf
PAL-Amigas. (Für NTSC-Amigas müssen einige Konstanten geändert werden,
und das Bild BillardTable muß natürlich auch angepaßt werden) Starten
können Sie das Programm wie üblich durch Doppelklicken von der
Workbench aus oder von CLI durch:"[run] Billard". Starten Sie das
Programm von der Workbench, so muß sich in der gleichen Schublade, in
der sich das Programm Billard befindet, auch das Bild BillardTable
befinden. Beim Start von CLI muß das Bild BillardTable im aktuellen
Directory vorhanden sein, andernfalls bricht das Programm ab. Nach
kurzer Ladezeit und dem Hinweis, bitte die Sharewaregebühr zu
bezahlen, sehen sie vor sich einen Billardtisch, auf dem momentan
sieben Kugeln liegen. Um Mißverständnisse zu vermeiden, möchte ich nun
einige Begriffe definieren:
Anklicken: Den Mauspfeil auf ein Objekt bewegen, die linke Maustaste
drücken und wieder loslassen.
Gadget: Oder auch Schalter, Taster.
Eines der 12 bzw. 13 Kästchen am unteren Bildschirmrand.
Spielball: Die Billardkugel, die mit dem Stock (Queue) angestoßen wird.
Bande: Der Rahmen des Billardtisches, an dem die Kugeln abprallen
können.
Queue: Der Stock, mit dem eine Kugel angestoßen wird.
Maus: Rollkugeleingabegerät, mit welchen der Mauszeiger auf dem
Bildschirm bewegt wird. Mit Mausposition ist die Position des
Mauszeigers (Kreuz) auf dem Bildschirm gemeint.
Nun zum Spiel. Klicken Sie einen Ball an und bewegen Sie den Mauspfeil
etwas. Wie sie sehen, wird von der Mitte des selektierten Balles zur
aktuellen Mausposition jeweils eine Linie gezogen. Diese Linie
symbolisiert den Billardqueue. Wenn Sie nochmals den linken Mausknopf
drücken und wieder loslassen, wird die Kugel in die Richtung der Linie
angestoßen, wobei die Anfangsgeschwindigkeit proportional zur Länge
der Linie ist. Sobald die Kugeln zur Ruhe gekommen sind, können Sie
auf die gleiche Weise eine weitere Kugel anstoßen.
Jetzt zu der Beschreibung der 13 Gadgets am unteren Bildschirmrand.
Die Gadget können mit der Maus angeklickt werden und veranlassen dann
eine bestimmte Reaktion. Danach kann sofort wieder normal
weitergespielt werden. (Mit Ausnahme der Gadgets "Quit" und "Set",
s.u.) Nun zu der Funktion der Gadget von links nach rechts:
Quit: Damit können Sie das Spiel beenden.
Set: Dieses Gadget hat eine gewisse Sonderstellung. Durch Anklicken
schalten Sie in einen anderen Modus, in dem Sie die Bälle
beliebig positionieren können. Sie wählen einen Ball durch
anklicken aus, verschieben ihn dann an die gewünschte Position
und legen ihn dort durch erneutes Klicken ab. Danach können Sie
mit dem nächsten Ball fortfahren. Sie können auch Bälle vom Rahmen
aufnehmen oder dort ablegen. Alle Bälle, die sich beim Beenden
dieses Modus auf dem Spielfeldrahmen befinden, werden
automatisch entfernt. Sie beenden diesen Modus durch erneutes
Anklicken des "Set"-Gadgets.
0 Dieses Gadget räumt alle Bälle von Tisch.
7,11,16:Es werden 7, 11 oder 16 Bälle auf dem Tisch in einer
vorgegebenen Position aufgebaut. Außerdem werden die 5 Zähler
(s.u), die am oberen rechten Bildschirmrand angezeigt werden,
zurückgesetzt.
RND: Die momentan auch den Tisch befindlichen Bälle werden zufällig
verteilt.
P: (Power) Wie schon erwähnt, ist die Anfangsgeschwindigkeit der
Bälle proportional zur Länge der Linie bzw. des Queues. Da man
die Maus nicht über den Bildschirmrand positionieren kann, ist
die Länge dieser Linie bei Bällen, die nahe am Spielfeldrand
liegen, begrenzt. Deshalb kann man den Ball nicht auf die
Maximalgeschwindigkeit beschleunigen. Hier tritt nun das Gadget
"Power" in Aktion. Nach anklicken von "Power" wird die maximale
Queuelänge verringert, wobei aber weiterhin die Maximallänge der
maximalen Geschwindigkeit entspricht. Da in diesem Power-Modus
die Queuelänge geringer ist, ist natürlich auch die
Zielgenauigkeit eingeschränkt. Deshalb sollte man diesen Modus
durch erneutes anklicken des Powergadgets wieder verlassen,
sobald der Spielball weit genug von der Bande entfernt ist.
<R R>:Mit diesen beiden Gadgets kann man die Reibung, die die Bälle
auf dem Tisch erfahren, einstellen. Die Zahl zwischen den beiden
R's gibt an, wie oft der Spielball bei einen maximalen Anstoß
den Tisch in horizontaler Richtung überqueren kann, bevor er
durch die Reibung zur Ruhe gekommen ist. Das linke Gadget
erniedrigt diese Zahl, das rechte erhöht sie bei jedem
Anklicken. Diese Zahl ist aber auf Werte zwischen 1 und 9
begrentzt.
Digi: Für einige Spielversionen mag es nützlich sein, wenn die Bälle
Nummern tragen. Durch anklicken dieses Gadgets erhalten sie
welche, allerdings wird dadurch die Illusion, daß die Bälle
rollen, zerstört. Erneutes Anklicken dieses Gadgets löscht die
Nummern wieder. Auch hierbei ist ein Zugriff auf BillardTable
nötig.
Pool: Dieses Programm unterstützt zwei Billardvarianten. Pool, bei
dem es darum geht, die Bälle in den Löchern zu versenken, und
eine andere Spielforn, bei der der Tisch keine Löcher hat, und
die Spieler versuchen, bestimmte Bälle auf eine bestimmte Weise
anzustoßen. Mit diesem Gadget kann man zwischen den beiden
Versionen umschalten. Dabei wird auf das Bild "BillardTable"
zugegriffen. Deshalb muß die entsprechende Diskette in einem
Laufwerk liegen.
Undo: Hiermit können einige Aktionen rückgängig gemacht werden. Undo
wirkt auf den zuletzt ausgeführten Stoß, oder auf die Gadgets
Set, 0, 7, 11, 16, und RND. Insbesondere ist "Undo" beim Üben
nützlich, da man damit einfach verunglückte Stöße zurücknehmen
kann.
Zähler:
Auf dem oberen rechten Rahmem des Tisches werden 5 Zähler angezeigt,
die bei einigen Spielvarianten vielleicht nützlich sein können. Der
erste Zähler zeigt die Anzahl der gemachten Stöße an. An dieser Zahl
kann man bei zwei Spielern auch erkennen, wer gerade dran ist
(gerader oder ungerader Zählerstand). Der nächste Zähler summiert
alle Punkte, die bei geraden Stoßnummern erziehlt werden (Spieler 1
bei zwei Spielern), der andere die Punkte, die bei ungeraden
Stoßnummern erziehlt werden. Der nächste Zähler gibt die Summe der
beiden vorherigen an. (Mit Punkten ist die Nummer gemeint, die die
Bälle im Digi-Modus tragen, und man bekonnt sie gutgeschrieben, wenn
die Kugel in ein Loch fällt.) Der letzte Zähler zeigt an, wie viele
Bälle momentan auf dem Tisch liegen.
Rechte Maustaste:
Durch Drücken der rechten Maustaste ist es möglich, den
Billard-Screen in den Hintergrund zu bringen und dadurch die
Workbench wieder sichtbar zu machen, ohne das Spiel zu verlassen.
Jetzt zu den Spielregeln:
~~~~~~~~~~~~~~~~~~~~~~~~
Da ich bislang noch nie echtes Billard gespielt habe, kann ich hierzu
keine genauen Aussagen machen. Allerdings soll dieses Spiel auch gar
nicht nach starren Regeln gespielt werden. Dieses Programm simuliert
einen Billardtisch. Wie beim echten Billard können sie jederzeit eine
beliebige Kugel anstoßen, Kugeln verschieben (mogeln), neue Stellungen
aufbauen und einiges mehr. Wenn Sie Pool-Billard spielen, ist es
vermutlich ihr Ziel, die Kugeln in den Löchern zu versenken. Die
Kugeln direkt in die Löcher zu stoßen, wird ihnen wohl nach einiger
Zeit zu leicht erscheinen. Dann sollte man vielleicht dazu übergehen,
mit dem Spielball eine andere Kugel so anzustoßen, daß diese in ein
Loch fällt. Weiter kann man sich das Spiel erschweren, indem man nur
das Anstoßen einer bestimmten Kugel zuläßt und eventuell auch noch
ansagt, welche Kugel man in welchem Loch versenken will. Bei der
anderen Version ohne Löcher geht es darum, daß der Spielball, bevor er
einen anderen Ball trifft, zuvor mehrmals die Bande berührt haben muß.
Beispielsweise spielen zwei Spieler mit drei Bällen. Jeder Spieler hat
einen eigenen Ball und muß diesen so anstoßen, daß er mindestens ein
oder zwei mal die Bande berührt, bevor er den dritten Ball trifft.
Zwei Spieler könnten auch folgendermaßem die Poolvariante Spielen: 16
Bälle werden durch anklicken von "16" und "RND" auf dem Tisch
verteilt. Dem einen Spieler gehören die Bälle mit geraden Nummern, dem
anderen die mit ungeraden Nummern. Die Spieler versuchen nun
abwechselnd, die Bälle des anderen Spielers in die Löcher zu stoßen.
Man kann sich also beliebige Spielregeln ausdenken und nach diesen
dann mit beliebig vielen Personen spielen.
Jetzt noch einige Hinweise: Das Spiel ist voll multitaskingtauglich.
Allerdings wird, wenn viele Bälle eng beieinander liegen, für die
Simulation der Ballbewegung sehr viel Rechenzeit verbraucht. Dies
erkennt man daran, daß die grafische Darstellung der Bälle etwas
ruckartig wird, und das andere Programme stark abgebremmst werden. Das
Spiel benutzt alle 4 Soundkanäle des Amiga. Da der Sound aber für das
Spiel nicht wichtig ist, werden die Soundkanäle nur mit einer geringen
Priorität angefordert. Deshalb können die Soundkanäle von anderen,
gleichzeitig laufenden Programmen dem Billardspiel entzogen werden.
Sie können dann entweder mit weniger Billard-Sound weiterspielen, oder
das andere Programm und Billard beenden und dann Billard wieder neu
starten. Der Hintergrund des Spieles besteht aus einem ILBM-Bild mit
Namen BillardTable. Sie können es mit jedem Malprogramm bearbeiten.
Insbesondere kann man die Farben der Bälle oder des Tisches verändern
oder auch die Bälle anders beschriften, mit einem Muster versehen usw.
Allerdings darf die Position der Bälle im Bild nicht geändert werden,
da sie sonst vom Programm nicht gefunden werden. Beim echten Billard
können die Bälle auch einen Spin bzw. Drall haben, was zu gekrümmten
Bahnen und anderen Stoßwinkeln führt. Das ist in dieser Simulation
nicht berücksichtigt.
Zum Schluß noch einige Hinweise für Programmierer: Das Programm ist in
Modula geschrieben und mit dem Compiler M2Amiga V3.3d compiliert worden.
Das Programm benutzt neben den Standardmodulen mein Modul
ILBMHandler1.1, welches wiederum das Modul TurboFiles verwendet.
TurboFiles ist auf Amok#24 veröffentlicht worden. Die alte, langsame
Version vom ILBMHandler ist auf Amok#17 erschienen. Obwohl ich die 50%
schnellere und erweiterte Version 1.1 bereits im July 89 an einen der
AMOK-Herausgeber (Friedtjof Siebert) geschickt hatte, ist sie bisher
leider nicht veröffentlicht worden, aber mit der alten Version müßte
es auch funktionieren. Ausserdem benutze ich MemSystem von Nicolas
Benezan. Es ist auf AMOK#16 enthalten, allergings mußte ich es etwas
an die Compilerversion 3.3 anpassen. (Ich habe die Definition "TYPE
LevelKey=LONGINT" von Implementations- ins Definitionsmodul verlagert.)
Für die Bewegung der Bälle ist die Prozedur Control verantwortlich.
Sie wird als VBlank-Interrupthandler installiert. Deshalb wird sie
garantiert 50 mal pro Sekunde aufgerufen, und die Bewegung der Bälle
kann in Echtzeit erfolgen, auch wenn nicht alle Bewegungsphasen auf
dem Bildschirm dargestellt werden. Die Darstellung der Bälle geschieht
als Bobs. Zuerst hatte ich mit VSprites experimentiert, aber bei der
Benutzung von verschiedenen Farben und mehr als 8 Sprites bekommt man
merkwürdige Effekte, z.B. das verschwinden von Sprites oder
Farbfehler. Die Bobs verhalten sich dagegen sehr ordentlich, allerdings
sind sie nicht besonders schnell. Bei einem Screen mit 32 Farben und
16 Bobs mit einer Größe von 16x16 Pixel kann man die Bobs mit der
Funktion DrawGList maximal 10 mal pro Sekunde darstellen lassen. Da
für die Kollisionsabfrage, die ich direkt über die Position der Bälle
vornehme, noch viel Rechenzeit verbraucht wird, kann man die Bälle
leider nur wenige Male pro Sekunde zeichnen lassen, was zu etwas
ruckartigen Bewegungen führt. Eine Verbesserung könnte man sicher
erziehlen, wenn man die Prozedur Control in Assebler übersetzt, aber
erstens ist es nicht ganz einfach, von Assembler aus auf die globalen
Variablen zuzugreifen, und zweitens ist es nicht sicher, ob es sich
wirklich lohnt, da die meiste Zeit wohl für FFP-Berechnungen
verbraucht wird. Andere Optimierungen, wie Zugriff auf Arrayelemente
über Pointer statt über Index habe ich bereits ausgeschöpft. Die
Prozedur Control ist in dieser Form sicher unverständlich. Die
Herleiting der Formeln füllen einige DIN-A4 Seiten; wer sie haben
möchte, kann Sie bei mir anfordern. (Die Bewegungsgleichungen beruhen
natürlich darauf, daß bei Stößen Energie- und Impulserhaltung gilt,
und daß auf die Kugeln während der Bewegung eine konstante
Reibungskraft entgegen der Bewegungsrichtung wirkt.) Die übrigen
Prozeduren sollten eigentlich verständlich sein und können eventuell
verbessert oder erweitert werden.
Stefan Salewski, 16.12.89